package cn.wolfcode.luowowo.article.service;

import cn.wolfcode.luowowo.article.domain.Destination;
import cn.wolfcode.luowowo.article.domain.Travel;
import cn.wolfcode.luowowo.common.query.DestinationQueryObject;
import cn.wolfcode.luowowo.common.query.DestinationThemeQueryObject;
import cn.wolfcode.luowowo.common.query.QueryObject;
import cn.wolfcode.luowowo.common.query.TravelQueryObject;
import cn.wolfcode.luowowo.member.domain.UserInfo;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface IDestinationService {

    PageInfo<Destination> query(QueryObject qo);

    /**
     * 查询某个目的地的面包屑
     * @param parentId
     * @return
     */
    List<Destination> listToasts(Long parentId);

    /**
     * 查询所有的目的地
     * @return
     */
    List<Destination> list();

    /**
     * 根据区域id查询目的地
     * @param regionId
     * @return
     */
    List<Destination> listByReginId(Long regionId);

    /**
     * 根据区域id查询对目的地,区域id>0则查询国家,否则查询国内的省份
     * @param regionId
     * @return
     */
    List<Destination> listHotDestByRegionId(Long regionId);

    /**
     * 根据目的地id查询国家
     * @param destId
     * @return
     */
    Destination getCountry(Long destId);

    /**
     * 根据目的地id查询省份
     * @param destId
     * @return
     */
    Destination getProvince(Long destId);

    /**
     * 根据目的地主题id查询目的地(首页月份)
     * @param themeId
     * @return
     */
//    List<Destination> listByThemeMonthId(Long themeId);

    /**
     * 查询热门目的地
     * @return
     */
    List<Destination> listIsHot();

    List<Destination> listByThemeId(Long themeId);

    PageInfo<Destination> listInThemeIds(DestinationThemeQueryObject qo);

    /**
     * 判断用户是否收藏的该地点,如果没有,收藏,如果有,取消收藏
     * @param user  该用户的id
     * @param travelId  该地点的id
     * @return
     */
    boolean isFavor(UserInfo user, Long travelId);

    /**
     * 通过用户的id查询该用户收藏的所有地点
     * @param qo
     * @return
     */
    PageInfo<Destination> listByUserFavor(TravelQueryObject qo);

    /**
     * 通过地点id,用户id来删除数据库中的关系
     * @param user
     * @param travelId
     * @return
     */
    void deleteIsFavor(UserInfo user,Long travelId);

    /**
     * 查询广东省下10个城市
     * @return
     */
    List<Destination> listByGuangDongR10();

    /**
     * 根据目的地ID查询目的地
     * @param destId
     * @return
     */
    Destination get(Long destId);
}
